# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/4/13 14:09'
"""

什么是机器学习
	机器学习是从数据中自动分析获得规律（模型），并利用规律对未知数据进行预测
	
机器学习应用场景
	自然语言处理  无人驾驶    计算机视觉    推荐系统

	机器学习的门槛：每个算法API当中的参数。 
	1）算法是核心，数据和计算是基础。
	2）大部分复杂模型的算法设计都是算法工程师在做，而我们
				分析很多的数据
				分析具体的业务
				应用常见的算法
				特征工程、调参数、优化
				
	我们应该怎么做
				
				学会分析问题，使用机器学习算法的目的，想要算法完成何种任务
				
				掌握算法基本思想，学会对问题用相应的算法解决
				
				学会利用库或者框架解决问题
	====================================================================================================
	数据来源：
		1 公司本身就有数据
		2 合作过来的数据
		3 购买的数据
		
	可用数据集：
		scikit-learn特点：
			1、数据量较小
            2、方便学习
        Kaggle特点：1、大数据竞赛平台
             2、80万科学家
             3、真实数据
             4、数据量巨大
        UCI特点：1、收录了360个数据集
             2、覆盖科学、生活、经济等领域           
             3、数据量几十万
    
    scikit-learn网址：http://scikit-learn.org/stable/datasets/index.html#datasets
	Kaggle网址：https://www.kaggle.com/datasets
	UCI数据集网址： http://archive.ics.uci.edu/ml/
	
	====================================================================================================	
		读取数据：pandas 
			底层使用 numpy， 速度快，为什么呢？
			numpy 去除了一个 GIL锁的 东西，历史原因，Python解析器(CPython) 开发的时候引入 GIL，开始的有很多好处，
			慢慢的这种实现方式被发现是蛋疼且低效的。但当大家试图去拆分和去除GIL的时候，发现大量库代码开发者已经重度依赖GIL而非常难以去除了。
	====================================================================================================			
	建立模型：
		根据 目标数据 划分应用种类。
	
	机器学习的开发流程：
		1 原始数据，明确问题做什么	
		2 数据的基本处理：pd处理数据（缺失值、合并表）
		3 特征工程 ====>> 
						特征工程如果没有做好的话，就算用再好的算法，算法套进去，效果是没有那么明显或效果不好。
						特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程，从而提高了对未知数据的模型准确性。
		包含：   
				特征理解
				特征抽取
				特征预处理（标准化、归一化、缺失值...）
				特征选择(去掉坏的特征)
				特征构造(构建未有的特征)
				特征转换(数据降维)
				特征学习(让我们使用机器学习算法来进行特征的学习，典型的如神经网络，它里面就有这种思想)
		4 找合适的算法去进行预测
		5 模型的评估，判定效果
			没有合格？
				参数调整
				换算法
				特征工程上再做一些处理
		6 上线使用（一般以API形式提供）		
	====================================================================================================
	
	数值型数据：
		标准缩放：
			1、归一化
				为了数据处理方便提出来的，把数据映射到0～1范围之内处理，更加便捷快速。
	        2、标准化
			3、缺失值
	类别型数据：one-hot编码
	时间类型：时间的切分
			
	====================================================================================================
		 
	监督学习（预测）
		分类    
			k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、SVM支持向量机、神经网络
		回归    
			线性回归、岭回归
		标注    
			隐马尔可夫模型
	无监督学习
		聚类k-means(K均值)
	
		
	监督学习：特征值 + 目标值	。输入数据 有特征有标签，即有标准答案
	非监督学习：特征值 。输入数据有特征无标签，即无标准答案。
	
	分类：目标值 离散型
	回归：目标值 连续性
			
	====================================================================================================
	
	为什么把SVM和LR放在一起进行比较？
		一是因为这两个模型应用广泛。
		二是因为这两个模型有很多相同点，在使用时容易混淆，不知道用哪个好，特别是对初学者。
		
		相同点
		都是线性分类器。本质上都是求一个最佳分类超平面。
		都是监督学习算法。
		都是判别模型。通过决策函数，判别输入特征之间的差别来进行分类。
		常见的判别模型有：KNN、SVM、LR。
		常见的生成模型有：朴素贝叶斯，隐马尔可夫模型。

	====================================================================================================
		在我们机器学习或者训练深度神经网络的时候经常会出现 欠拟合和过拟合 这两个问题，
	但是，一开始我们的模型往往是欠拟合的，也正是因为如此才有了优化的空间，我们需要不断的调整算法来使得模型的表达能拿更强。
	但是优化到了一定程度就需要解决过拟合的问题了，这个问题也在学术界讨论的比较多。
	---------------------------------------------------------------------------------------------------
	过拟合与欠拟合：
	
		欠拟合：
			欠拟合是指模型不能在训练集上获得足够低的误差。
			模型复杂度低，模型在训练集上就表现很差，没法学习到数据背后的规律。
			一个假设在训练数据上不能获得更好的拟合， 但是在训练数据外的数据集上也不能很好地拟合数据，此时认为这个假设出现了欠拟合的现象。(模型过于简单)
			
		过拟合：
			过拟合是指训练误差和测试误差之间的差距太大。
			模型在训练集上表现很好，但在测试集上却表现很差，泛化能力差。
			一个假设在训练数据上能够获得比其他假设更好的拟合， 但是在训练数据外的数据集上却不能很好地拟合数据，此时认为这个假设出现了过拟合的现象。(模型过于复杂)

	欠拟合原因以及解决办法：
		原因：
			学习到数据的特征过少
		解决办法：
			增加数据的特征数量
	
	---------------------------------------------------------------------------------------------------
	过拟合原因以及解决办法：
		原因：
			原始特征过多，存在一些嘈杂特征， 
			模型过于复杂是因为模型尝试去兼顾
			各个测试数据点

		解决办法：
			进行特征选择，消除关联性大的特征(很难做)
			交叉验证(让所有数据都有过训练)
			正则化(了解)	
	---------------------------------------------------------------------------------------------------
	根据结果现象判断：欠拟合、过拟合
			欠拟合:
				训练集，表现不行（通过 交叉验证GridSearchCV ）。
				测试集：表现更不行。
			过拟合：
				训练集，表现可以。
				测试集：表现不行。

	====================================================================================================
		
	机器学习 算法选择：
	
		https://blog.csdn.net/a790209714/article/details/52708464
		
		http://scikit-learn.org/stable/tutorial/machine_learning_map/
	
"""
